package fr.uniscol.dao.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;

import fr.uniscol.dao.IServiceEnseignantDao;
import fr.uniscol.model.AnneeScolaire;
import fr.uniscol.model.Enseignant;
import fr.uniscol.model.Structure;
import fr.uniscol.model.Matiere;
import fr.uniscol.model.ServiceEnseignant;

public class ServiceEnseignantDaoImpl implements IServiceEnseignantDao {

	private static Logger log = Logger.getLogger(ServiceEnseignantDaoImpl.class);
	
	private SessionFactory sessionFactory;
	
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public ServiceEnseignant getServiceEnseignant(AnneeScolaire annee, Matiere matiere, Enseignant ens, Structure classe) {
		// TODO Auto-generated method stub
		return null;
	}

	public void enregistrerServiceEnseignant(ServiceEnseignant service) {
		
		Session session = sessionFactory.getCurrentSession();
		
		log.debug("SAVE ServiceEnseignant: (" + service.getId() +") " + service.getEnseignant().getId() + ", " + service.getMatiere().getId() + ", " + service.getStructure().getId());
		
		session.saveOrUpdate(service);
	}

	public List<ServiceEnseignant> getServicesEnseignant(AnneeScolaire annee, Enseignant enseignant) {
		
		Session session = sessionFactory.getCurrentSession();
		
		Query q = session.createQuery("From ServiceEnseignant Where enseignant_id=:enseignant");
		q.setParameter("enseignant", enseignant.getId());		
		
		List<ServiceEnseignant> services = new ArrayList<ServiceEnseignant>();
		
		Iterator it = q.iterate();
		ServiceEnseignant s = null;
		while(it.hasNext()){
			s = (ServiceEnseignant) it.next();
			
			s.setMatiere(annee.getMatiere(s.getMatiere().getId()));
			s.setStructure(annee.getClasse(s.getStructure().getId()));
			
			services.add(s);
		}
		
		//return q.list();
		return services;
	}
}
